package com.cw2.behavioral.iterator;

import java.util.ArrayList;
import java.util.List;

/**
 * 抽象的迭代聚合类
 */
public abstract class BeautifulMan {
    // 私有集合,不方便暴露给外界
    private List<String> friends = new ArrayList<>();

    /**
     * 添加朋友
     * @param name 名字
     */
    void addFriend(String name){
        friends.add(name);
    }

    /**
     * 移除朋友
     * @param name 名字
     */
    void removeFriend(String name){
        friends.remove(name);
    }

    /**
     * 获取迭代器
     * @return
     */
    Iterator getIterator(){
        return new Iterator();
    }

    class Iterator implements Itr{
        int course = 0;

        @Override
        public boolean hasNext() {
            // 当前是否存在
            return course < friends.size();
        }

        @Override
        public String next() {
            // 第一次调用返回第一个元素
            // 指针需要加1
            String name = friends.get(course);
            course ++;
            return name;
        }

        @Override
        public String firstFriend() {
            // 返回第一个
            return friends.get(0);
        }

        @Override
        public String lastFriend() {
            // 返回最后一个元素
            return friends.get(friends.size() - 1);
        }
    }

    public interface Itr {

        boolean hasNext();

        String next();

        String firstFriend();
        String lastFriend();
    }
}
